iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
AI 自動化

30 天打造 AI 自動化維運平台:從監控、告警到故障分析系列 第 6

Day 6|有監控還不夠:開始設定第一條告警規則

  • 分享至 

  • xImage
  •  

Day 5 我們已經把 Prometheus 的資料接到 Grafana,也做出了第一個 Dashboard。

目前已經可以直接看到:

Server Status
CPU Usage
Memory Usage

到這裡,「看得到」這件事情算是完成了。

但實際維運時有一個很現實的問題:

不可能一直有人盯著 Grafana。

如果今天 CPU 半夜突然跑到 95%,五分鐘後又恢復正常,隔天再打開 Dashboard 時,可能根本不會注意到曾經發生過異常。

所以今天要往下一步走:

讓系統自己判斷什麼時候算異常。

今天要做到什麼?

今天只設定一條規則:

server01
CPU 使用率 > 90%
持續 5 分鐘

產生 Alert

先不要一次設定 CPU、Memory、Disk、Network。

只要第一條告警可以正常運作,後面的規則基本上都是同樣的概念。

為什麼不是 CPU 一超過 90% 就告警?

假設 Server 正在做某個工作:

CPU
40%
45%
93%
52%
48%

CPU 可能只是短暫衝高。

如果只要超過 90% 就立刻告警,很容易產生一堆沒有必要處理的通知。

所以我希望第一條規則是:

CPU 超過 90%,而且持續 5 分鐘,才算真正的異常。

這也是設定監控告警時很重要的一個觀念。

不是看到數字高就一定有問題,而是要考慮:

數值 + 持續時間

Step 1:先確認 CPU 查詢

先回到 Grafana。

我們 Day 5 已經使用過這段 PromQL:

100 - (
avg by(instance) (
rate(
node_cpu_seconds_total{
job="server01",
mode="idle"
}[5m]
)
) * 100
)

這段查詢最後會得到類似:

instance CPU
192.168.1.101:9100 35%

也就是目前 server01 的 CPU 使用率。

今天的 Alert 就直接使用這個結果。

Step 2:建立 Alert Rule

進入 Grafana:

Alerting

Alert rules

New alert rule

不同 Grafana 版本的介面名稱可能稍微不同,但概念基本上一樣。

Alert 名稱可以先設定:

Server01 High CPU

接著 Data Source 選擇:

Prometheus

Query 放入剛才的 CPU PromQL。

Step 3:設定 CPU > 90%

接著設定判斷條件。

我們希望:

CPU Usage > 90

所以 Threshold 設定成:

IS ABOVE
90

概念就是:

CPU <= 90%

Normal

如果:

CPU > 90%

Alert Condition

到這裡,Grafana 已經知道什麼叫做「CPU 過高」。

Step 4:加入持續時間

但前面提到,我不希望 CPU 瞬間衝高就直接產生告警。

所以再設定:

For:5m

整條規則現在就變成:

CPU > 90%
+
持續 5 分鐘

High CPU Alert

這樣就比較接近平常實際監控會使用的方式。

Alert 的幾個狀態

設定完成之後,在 Grafana 裡通常會看到幾種不同狀態。

Normal

目前沒有達到告警條件。

CPU 35%

Normal
Pending

已經超過門檻,但還沒有持續到設定時間。

例如:

CPU 95%
持續 2 分鐘

Pending

因為我們設定要持續 5 分鐘,所以現在還不會正式觸發。

Firing

如果:

CPU 95%
持續超過 5 分鐘

就會進入:

Firing

代表這個問題已經符合我們定義的告警條件。

可以簡單理解成:

Normal

CPU > 90%

Pending

持續 5 分鐘

Firing
為什麼 Pending 很重要?

以前我在看監控的時候,可能會直覺覺得:

超過 Threshold 就算異常。

但實際設定告警時,會發現「持續多久」其實同樣重要。

假設 CPU:

10:01 45%
10:02 96%
10:03 52%

這比較像短暫負載。

但如果:

10:01 95%
10:02 96%
10:03 94%
10:04 97%
10:05 96%
10:06 95%

就比較值得注意。

所以我們真正想抓的不是:

CPU 曾經超過 90%。

而是:

CPU 是否持續處在異常狀態。

現在架構多了一個東西

昨天我們的流程是:

server01

Node Exporter

Prometheus

Grafana

Dashboard

今天變成:

server01

Node Exporter

Prometheus

Grafana
├── Dashboard

└── Alert Rule

CPU > 90%

Firing

雖然只是多了一條規則,但意義其實不太一樣。

前面是:

人去看系統有沒有問題。

現在開始變成:

系統先幫我們判斷是不是有問題。

Day 6 完成

今天我們完成了第一條真正的監控規則:

✓ 使用 Prometheus CPU Metrics
✓ 建立 Grafana Alert Rule
✓ 設定 CPU > 90%
✓ 設定持續 5 分鐘
✓ 了解 Normal / Pending / Firing

目前先不要急著建立十幾條 Alert。

先確定:

server01 CPU 過高時,Grafana 能正確判斷並進入 Firing。

這一步正常之後,後面 Memory、Disk、Service Down 都可以用相同方式慢慢加進來。

但現在還差最後一步

雖然 Grafana 已經知道:

Server01 High CPU
Status:Firing

可是如果沒有人打開 Grafana,還是不會知道。

所以接下來要解決的是:

告警發生之後,怎麼主動送到我們手上?


上一篇
Day 5|讓監控資料看得懂:用 Grafana 做第一個 Dashboard
下一篇
Day 7|告警不能只留在 Grafana:把異常通知送出去
系列文
30 天打造 AI 自動化維運平台:從監控、告警到故障分析9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言